﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace lifeofbob
{
    public class Projectile
    {
        Vector2 pos;
        Point size;
        Vector2 speed;
        Texture2D texture;
        private double timeOnMap;

        /// <summary>
        /// Standard konstruktor för projektiler
        /// </summary>
        /// <param name="pos">Positon</param>
        /// <param name="size">Storlek</param>
        /// <param name="speed">Hastighet</param>
        /// <param name="texture">Texture</param>
        public Projectile(Vector2 pos, Point size, Vector2 speed, Texture2D texture) {
            this.pos = pos;
            this.size = size;
            this.speed = speed;
            this.texture = texture;
        }


        /// <summary>
        /// Properties för en rectangle
        /// </summary>
        public Rectangle rectangle {
            get { return new Rectangle((int)pos.X, (int)pos.Y, size.X, size.Y); }
        }

        /// <summary>
        /// Updaterar bara positionen med hjälp av hastigheten
        /// </summary>
        public virtual void Update(GameTime gt) {
            timeOnMap += gt.ElapsedGameTime.TotalSeconds;
            pos += speed;
        }

        /// <summary>
        /// Standard draw metod
        /// </summary>
        /// <param name="sb">Tar emot en spritebatch</param>
        public virtual void Draw(SpriteBatch sb) {
            sb.Draw(texture, rectangle, Color.White);
        }

        /// <summary>
        /// Metod för att se ifall en projektil är utanför banan
        /// </summary>
        /// <returns>Returnerar true ifall den är utanför</returns>
        public virtual bool OutOfBounds(Vector2 centre)
        {
            if (pos.X < centre.X-700 || pos.X > centre.X+700 || pos.Y < centre.Y-700 || pos.Y > centre.Y+700)
                return true;
            else
                return false;
        }

        /// <summary>
        /// Metod för att se ifall en projektil har varit för länge på banan
        /// </summary>
        /// <returns>Returnerar true ifall den har varit för länge på banan</returns>
        public bool OutOfTime()
        {
            if (timeOnMap >= 10)
                return true;
            else return false;
        }
    }
}
